পাইথন পান্ডাসে ডেটাফ্রেম মার্জ ও জয়েন করার একটি সম্পূর্ণ নির্দেশিকা, যেখানে ইনার, আউটার, লেফট, রাইট জয়েন সহ বিভিন্ন কৌশল এবং বৈশ্বিক ডেটা বিশ্লেষণের জন্য ব্যবহারিক উদাহরণ দেওয়া হয়েছে।
পাইথন পান্ডাস মার্জিং: ডেটা বিশ্লেষণের জন্য ডেটাফ্রেম জয়েনিং স্ট্র্যাটেজি আয়ত্ত করা
ডেটা ম্যানিপুলেশন ডেটা বিশ্লেষণের একটি গুরুত্বপূর্ণ দিক, এবং পাইথনের পান্ডাস লাইব্রেরি এই উদ্দেশ্যে শক্তিশালী সরঞ্জাম সরবরাহ করে। এই সরঞ্জামগুলির মধ্যে, ডেটাফ্রেম মার্জিং এবং জয়েনিং সাধারণ কলাম বা সূচকের উপর ভিত্তি করে ডেটাসেটগুলিকে একত্রিত করার জন্য অপরিহার্য অপারেশন। এই ব্যাপক নির্দেশিকাটি পান্ডাসে বিভিন্ন ডেটাফ্রেম জয়েনিং কৌশল অন্বেষণ করে, যা আপনাকে বিভিন্ন উৎস থেকে ডেটা কার্যকরভাবে একত্রিত এবং বিশ্লেষণ করার জ্ঞান দিয়ে সজ্জিত করবে।
ডেটাফ্রেম মার্জিং এবং জয়েনিং বোঝা
ডেটাফ্রেম মার্জিং এবং জয়েনিং-এর সাথে একটি শেয়ার্ড কলাম বা সূচকের উপর ভিত্তি করে দুটি বা ততোধিক ডেটাফ্রেমকে একটি একক ডেটাফ্রেমে একত্রিত করা জড়িত। `merge` এবং `join`-এর মধ্যে প্রাথমিক পার্থক্য হল যে `merge` হল পান্ডাস লাইব্রেরির একটি ফাংশন এবং সাধারণত কলামগুলির উপর ডেটাফ্রেম জয়েন করে, যখন `join` হল একটি ডেটাফ্রেম পদ্ধতি যা প্রধানত সূচকগুলির উপর ডেটাফ্রেম জয়েন করে, যদিও এটি কলামগুলির সাথেও ব্যবহার করা যেতে পারে।
মূল ধারণা
- ডেটাফ্রেম: সম্ভাব্য বিভিন্ন প্রকারের কলাম সহ দ্বি-মাত্রিক লেবেলযুক্ত ডেটা কাঠামো।
- সাধারণ কলাম/সূচক: কলাম বা সূচক যা ডেটাফ্রেম জুড়ে একই নাম এবং ডেটা প্রকার শেয়ার করে, মার্জিং/জয়েনিংয়ের ভিত্তি হিসাবে কাজ করে।
- জয়েন প্রকার: মার্জিং/জয়েনিং প্রক্রিয়া চলাকালীন অমিলিত সারিগুলি পরিচালনা করার জন্য বিভিন্ন কৌশল, যার মধ্যে ইনার, আউটার, লেফট এবং রাইট জয়েন অন্তর্ভুক্ত।
`pd.merge()` ব্যবহার করে ডেটাফ্রেম মার্জিং
`pd.merge()` ফাংশন হল কলামগুলির উপর ভিত্তি করে ডেটাফ্রেম মার্জ করার প্রাথমিক সরঞ্জাম। এটি এক বা একাধিক সাধারণ কলামের উপর ভিত্তি করে ডেটা একত্রিত করার একটি নমনীয় উপায় সরবরাহ করে।
সিনট্যাক্স
pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=False, suffixes=('_x', '_y'), copy=True, indicator=False, validate=None)
প্যারামিটার
- left: মার্জ করার জন্য বাম ডেটাফ্রেম।
- right: মার্জ করার জন্য ডান ডেটাফ্রেম।
- how: মার্জের প্রকার ('inner', 'outer', 'left', 'right')। ডিফল্ট হল 'inner'।
- on: যে কলাম(গুলি) এর উপর জয়েন করা হবে তার নাম। এগুলি উভয় ডেটাফ্রেমেই থাকতে হবে।
- left_on: জয়েন কী হিসাবে ব্যবহার করার জন্য বাম ডেটাফ্রেমের কলাম(গুলি) এর নাম।
- right_on: জয়েন কী হিসাবে ব্যবহার করার জন্য ডান ডেটাফ্রেমের কলাম(গুলি) এর নাম।
- left_index: যদি True হয়, বাম ডেটাফ্রেমের সূচক(ইনডেক্স) জয়েন কী হিসাবে ব্যবহার করুন।
- right_index: যদি True হয়, ডান ডেটাফ্রেমের সূচক(ইনডেক্স) জয়েন কী হিসাবে ব্যবহার করুন।
- sort: জয়েন কী দ্বারা ফলাফল ডেটাফ্রেমকে অভিধান অনুসারে সাজান। ডিফল্ট হল False।
- suffixes: ওভারল্যাপিং কলামের নামগুলিতে প্রয়োগ করার জন্য স্ট্রিং প্রত্যয়গুলির একটি টুপল। ডিফল্ট হল ('_x', '_y')।
- copy: যদি False হয়, সম্ভব হলে নতুন ডেটাফ্রেমে ডেটা কপি করা এড়িয়ে চলুন। ডিফল্ট হল True।
- indicator: যদি True হয়, প্রতিটি সারির উৎস নির্দেশ করে '_merge' নামক একটি কলাম যোগ করে।
- validate: মার্জ নির্দিষ্ট প্রকারের কিনা তা পরীক্ষা করে। "one_to_one", "one_to_many", "many_to_one", "many_to_many"।
জয়েন প্রকারের ব্যাখ্যা
`pd.merge()`-এ `how` প্যারামিটারটি সম্পাদিত জয়েনের ধরন নির্ধারণ করে। বিভিন্ন জয়েন প্রকার অমিলিত সারিগুলিকে বিভিন্ন উপায়ে পরিচালনা করে।
ইনার জয়েন
একটি ইনার জয়েন শুধুমাত্র সেই সারিগুলি ফেরত দেয় যেগুলির জয়েন কীগুলির উপর ভিত্তি করে উভয় ডেটাফ্রেমে মিলিত মান রয়েছে। অমিলিত মান সহ সারিগুলি ফলাফল থেকে বাদ দেওয়া হয়।
উদাহরণ:
দুটি ডেটাফ্রেম বিবেচনা করুন:
import pandas as pd
# DataFrame 1: Customer Orders
df_orders = pd.DataFrame({
'order_id': [1, 2, 3, 4, 5],
'customer_id': [101, 102, 103, 104, 105],
'product_id': [1, 2, 1, 3, 2],
'quantity': [2, 1, 3, 1, 2]
})
# DataFrame 2: Customer Information
df_customers = pd.DataFrame({
'customer_id': [101, 102, 103, 106],
'customer_name': ['Alice', 'Bob', 'Charlie', 'David'],
'country': ['USA', 'Canada', 'UK', 'Australia']
})
# Inner Join
df_inner = pd.merge(df_orders, df_customers, on='customer_id', how='inner')
print(df_inner)
আউটপুট:
order_id customer_id product_id quantity customer_name country
0 1 101 1 2 Alice USA
1 2 102 2 1 Bob Canada
2 3 103 1 3 Charlie UK
এই উদাহরণে, ইনার জয়েন `customer_id` কলামের উপর ভিত্তি করে `df_orders` এবং `df_customers` ডেটাফ্রেমগুলিকে একত্রিত করে। শুধুমাত্র যে গ্রাহকরা অর্ডার দিয়েছেন তারাই ফলাফলে অন্তর্ভুক্ত। গ্রাহক 'ডেভিড' (customer_id 106) বাদ পড়েছেন কারণ তার কোনো অর্ডার নেই।
আউটার জয়েন (ফুল আউটার জয়েন)
একটি আউটার জয়েন উভয় ডেটাফ্রেমের সমস্ত সারি ফেরত দেয়, যার মধ্যে অমিলিত সারিও অন্তর্ভুক্ত। যদি একটি সারির অন্য ডেটাফ্রেমে কোনো মিল না থাকে, তাহলে সংশ্লিষ্ট কলামগুলিতে `NaN` (নট আ নাম্বার) মান থাকবে।
উদাহরণ:
# Outer Join
df_outer = pd.merge(df_orders, df_customers, on='customer_id', how='outer')
print(df_outer)
আউটপুট:
order_id customer_id product_id quantity customer_name country
0 1.0 101 1.0 2.0 Alice USA
1 2.0 102 2.0 1.0 Bob Canada
2 3.0 103 1.0 3.0 Charlie UK
3 4.0 104 3.0 1.0 NaN NaN
4 5.0 105 2.0 2.0 NaN NaN
5 NaN 106 NaN NaN David Australia
আউটার জয়েন সমস্ত গ্রাহক এবং সমস্ত অর্ডার অন্তর্ভুক্ত করে। গ্রাহক 104 এবং 105 এর অর্ডার আছে কিন্তু গ্রাহকের তথ্য নেই, এবং গ্রাহক 106 এর গ্রাহকের তথ্য আছে কিন্তু কোনো অর্ডার নেই। অনুপস্থিত মানগুলি `NaN` হিসাবে উপস্থাপিত হয়।
লেফট জয়েন
একটি লেফট জয়েন বাম ডেটাফ্রেমের সমস্ত সারি এবং ডান ডেটাফ্রেমের মিলিত সারিগুলি ফেরত দেয়। যদি বাম ডেটাফ্রেমের একটি সারির ডান ডেটাফ্রেমে কোনো মিল না থাকে, তাহলে ডান ডেটাফ্রেমের সংশ্লিষ্ট কলামগুলিতে `NaN` মান থাকবে।
উদাহরণ:
# Left Join
df_left = pd.merge(df_orders, df_customers, on='customer_id', how='left')
print(df_left)
আউটপুট:
order_id customer_id product_id quantity customer_name country
0 1 101 1 2 Alice USA
1 2 102 2 1 Bob Canada
2 3 103 1 3 Charlie UK
3 4 104 3 1 NaN NaN
4 5 105 2 2 NaN NaN
লেফট জয়েন `df_orders` থেকে সমস্ত অর্ডার অন্তর্ভুক্ত করে। গ্রাহক 104 এবং 105 এর অর্ডার আছে কিন্তু গ্রাহকের তথ্য নেই, তাই সেই অর্ডারগুলির জন্য `customer_name` এবং `country` কলামগুলি `NaN`।
রাইট জয়েন
একটি রাইট জয়েন ডান ডেটাফ্রেমের সমস্ত সারি এবং বাম ডেটাফ্রেমের মিলিত সারিগুলি ফেরত দেয়। যদি ডান ডেটাফ্রেমের একটি সারির বাম ডেটাফ্রেমে কোনো মিল না থাকে, তাহলে বাম ডেটাফ্রেমের সংশ্লিষ্ট কলামগুলিতে `NaN` মান থাকবে।
উদাহরণ:
# Right Join
df_right = pd.merge(df_orders, df_customers, on='customer_id', how='right')
print(df_right)
আউটপুট:
order_id customer_id product_id quantity customer_name country
0 1.0 101 1.0 2.0 Alice USA
1 2.0 102 2.0 1.0 Bob Canada
2 3.0 103 1.0 3.0 Charlie UK
3 NaN 106 NaN NaN David Australia
রাইট জয়েন `df_customers` থেকে সমস্ত গ্রাহক অন্তর্ভুক্ত করে। গ্রাহক 106 এর গ্রাহকের তথ্য আছে কিন্তু কোনো অর্ডার নেই, তাই সেই গ্রাহকের জন্য `order_id`, `product_id`, এবং `quantity` কলামগুলি `NaN`।
`df.join()` ব্যবহার করে ডেটাফ্রেম জয়েনিং
`df.join()` পদ্ধতিটি প্রাথমিকভাবে তাদের সূচকগুলির উপর ভিত্তি করে ডেটাফ্রেম জয়েন করতে ব্যবহৃত হয়। এটি কলামগুলির উপর জয়েন করার জন্যও ব্যবহার করা যেতে পারে, তবে কলাম-ভিত্তিক জয়েনগুলির জন্য `pd.merge()` ব্যবহার করা সাধারণত বেশি সুবিধাজনক।
সিনট্যাক্স
DataFrame.join(other, on=None, how='left', lsuffix='', rsuffix='', sort=False)
প্যারামিটার
- other: জয়েন করার জন্য অন্য ডেটাফ্রেম।
- on: জয়েন করার জন্য কলামের নাম। যদি সূচককে জয়েন কী হিসাবে ব্যবহার না করা হয় তবে এটি পাস করতে হবে।
- how: বাম এবং ডান সেটের অপারেশন কিভাবে পরিচালনা করা হবে। ডিফল্ট হল 'left'।
- lsuffix: ওভারল্যাপিং কলামের নামগুলি ওভাররাইড করতে বাম ডেটাফ্রেম থেকে ব্যবহার করার জন্য প্রত্যয়।
- rsuffix: ওভারল্যাপিং কলামের নামগুলি ওভাররাইড করতে ডান ডেটাফ্রেম থেকে ব্যবহার করার জন্য প্রত্যয়।
- sort: জয়েন কী দ্বারা ফলাফল ডেটাফ্রেমকে অভিধান অনুসারে সাজান। ডিফল্ট হল False।
সূচকের উপর জয়েন করা
যখন সূচকের উপর জয়েন করা হয়, তখন `on` প্যারামিটার ব্যবহার করা হয় না।
উদাহরণ:
# DataFrame 1: Customer Orders with Customer ID as Index
df_orders_index = df_orders.set_index('customer_id')
# DataFrame 2: Customer Information with Customer ID as Index
df_customers_index = df_customers.set_index('customer_id')
# Join on Index (Left Join)
df_join_index = df_orders_index.join(df_customers_index, how='left')
print(df_join_index)
আউটপুট:
order_id product_id quantity customer_name country
customer_id
101 1 1 2 Alice USA
102 2 2 1 Bob Canada
103 3 1 3 Charlie UK
104 4 3 1 NaN NaN
105 5 2 2 NaN NaN
এই উদাহরণে, `join()` পদ্ধতিটি সূচক (`customer_id`) এর উপর একটি লেফট জয়েন করার জন্য ব্যবহৃত হয়। ফলাফলটি `pd.merge()` ব্যবহার করে লেফট জয়েনের অনুরূপ, তবে জয়েনটি একটি কলামের পরিবর্তে সূচকের উপর ভিত্তি করে।
কলামের উপর জয়েন করা
`df.join()` ব্যবহার করে একটি কলামের উপর জয়েন করার জন্য, আপনাকে `on` প্যারামিটারটি নির্দিষ্ট করতে হবে।
উদাহরণ:
# Joining on a column
df_join_column = df_orders.join(df_customers.set_index('customer_id'), on='customer_id', how='left')
print(df_join_column)
আউটপুট:
order_id customer_id product_id quantity customer_name country
0 1 101 1 2 Alice USA
1 2 102 2 1 Bob Canada
2 3 103 1 3 Charlie UK
3 4 104 3 1 NaN NaN
4 5 105 2 2 NaN NaN
এই উদাহরণটি `customer_id` কলাম ব্যবহার করে `df_orders` কে `df_customers` এর সাথে জয়েন করা দেখায়। মনে রাখবেন যে জয়েন করার আগে `df_customers` এ `customer_id` সূচক হিসাবে সেট করা হয়েছে।
ওভারল্যাপিং কলামগুলি পরিচালনা করা
ডেটাফ্রেম মার্জ বা জয়েন করার সময়, ওভারল্যাপিং কলামের নামগুলি (উভয় ডেটাফ্রেমের একই নামের কলাম) দেখা দেওয়া সাধারণ। পান্ডাস `pd.merge()` এ `suffixes` প্যারামিটার এবং `df.join()` এ `lsuffix` ও `rsuffix` প্যারামিটার সরবরাহ করে এই পরিস্থিতিগুলি পরিচালনা করার জন্য।
`pd.merge()` এ `suffixes` ব্যবহার করা
`suffixes` প্যারামিটার আপনাকে এমন প্রত্যয়গুলি নির্দিষ্ট করার অনুমতি দেয় যা ওভারল্যাপিং কলামের নামগুলিতে যোগ করা হবে যাতে সেগুলিকে আলাদা করা যায়।
উদাহরণ:
# DataFrame 1: Product Information
df_products1 = pd.DataFrame({
'product_id': [1, 2, 3],
'product_name': ['Product A', 'Product B', 'Product C'],
'price': [10, 20, 15]
})
# DataFrame 2: Product Information (with potentially updated prices)
df_products2 = pd.DataFrame({
'product_id': [1, 2, 4],
'product_name': ['Product A', 'Product B', 'Product D'],
'price': [12, 18, 25]
})
# Merge with suffixes
df_merged_suffixes = pd.merge(df_products1, df_products2, on='product_id', suffixes=('_old', '_new'))
print(df_merged_suffixes)
আউটপুট:
product_id product_name_old price_old product_name_new price_new
0 1 Product A 10 Product A 12
1 2 Product B 20 Product B 18
এই উদাহরণে, `product_name` এবং `price` কলাম উভয় ডেটাফ্রেমেই বিদ্যমান। `suffixes` প্যারামিটার বাম এবং ডান ডেটাফ্রেমের কলামগুলিকে আলাদা করতে যথাক্রমে `_old` এবং `_new` প্রত্যয় যোগ করে।
`df.join()` এ `lsuffix` এবং `rsuffix` ব্যবহার করা
`lsuffix` এবং `rsuffix` প্যারামিটারগুলি `df.join()` এর জন্য অনুরূপ কার্যকারিতা সরবরাহ করে। `lsuffix` বাম ডেটাফ্রেমের ওভারল্যাপিং কলামগুলিতে যোগ হয়, এবং `rsuffix` ডান ডেটাফ্রেমেরগুলিতে।
উদাহরণ:
# Join with lsuffix and rsuffix
df_products1_index = df_products1.set_index('product_id')
df_products2_index = df_products2.set_index('product_id')
df_joined_suffixes = df_products1_index.join(df_products2_index, lsuffix='_old', rsuffix='_new', how='outer')
print(df_joined_suffixes)
আউটপুট:
product_name_old price_old product_name_new price_new
product_id
1 Product A 10.0 Product A 12.0
2 Product B 20.0 Product B 18.0
3 Product C 15.0 NaN NaN
4 NaN NaN Product D 25.0
ব্যবহারিক উদাহরণ এবং ব্যবহারের ক্ষেত্র
ডেটাফ্রেম মার্জিং এবং জয়েনিং বিভিন্ন ডেটা বিশ্লেষণ পরিস্থিতিতে ব্যাপকভাবে ব্যবহৃত হয়। এখানে কিছু ব্যবহারিক উদাহরণ দেওয়া হল:
বিক্রয় ডেটা সহ পণ্যের তথ্য একত্রিত করা
একটি সাধারণ ব্যবহারের ক্ষেত্র হল বিক্রয় ডেটার সাথে পণ্যের তথ্য একত্রিত করা। ধরুন আপনার কাছে বিক্রয় লেনদেন ধারণকারী একটি ডেটাফ্রেম এবং পণ্যের বিবরণ ধারণকারী আরেকটি ডেটাফ্রেম রয়েছে। পণ্যের তথ্য সহ বিক্রয় ডেটাকে সমৃদ্ধ করতে আপনি এই ডেটাফ্রেমগুলিকে মার্জ করতে পারেন।
উদাহরণ:
# Sales Transactions Data
df_sales = pd.DataFrame({
'transaction_id': [1, 2, 3, 4, 5],
'product_id': [101, 102, 103, 101, 104],
'quantity': [2, 1, 3, 1, 2],
'sales_date': ['2023-01-15', '2023-02-20', '2023-03-10', '2023-04-05', '2023-05-01']
})
# Product Information Data
df_products = pd.DataFrame({
'product_id': [101, 102, 103, 104],
'product_name': ['Laptop', 'Mouse', 'Keyboard', 'Monitor'],
'category': ['Electronics', 'Electronics', 'Electronics', 'Electronics'],
'price': [1200, 25, 75, 300]
})
# Merge Sales Data with Product Information
df_sales_enriched = pd.merge(df_sales, df_products, on='product_id', how='left')
print(df_sales_enriched)
আউটপুট:
transaction_id product_id quantity sales_date product_name category price
0 1 101 2 2023-01-15 Laptop Electronics 1200
1 2 102 1 2023-02-20 Mouse Electronics 25
2 3 103 3 2023-03-10 Keyboard Electronics 75
3 4 101 1 2023-04-05 Laptop Electronics 1200
4 5 104 2 2023-05-01 Monitor Electronics 300
ফলস্বরূপ ডেটাফ্রেম `df_sales_enriched` বিক্রয় লেনদেন এবং সংশ্লিষ্ট পণ্যের তথ্য ধারণ করে, যা বিক্রয় প্রবণতা এবং পণ্যের কার্যকারিতা সম্পর্কে আরও বিস্তারিত বিশ্লেষণের অনুমতি দেয়।
গ্রাহক ডেটা সহ জনসংখ্যাগত তথ্য একত্রিত করা
আরেকটি সাধারণ ব্যবহারের ক্ষেত্র হল গ্রাহক ডেটার সাথে জনসংখ্যাগত তথ্য একত্রিত করা। এটি জনসংখ্যাগত কারণগুলির উপর ভিত্তি করে গ্রাহকের আচরণ বিশ্লেষণের অনুমতি দেয়।
উদাহরণ:
# Customer Data
df_customers = pd.DataFrame({
'customer_id': [1, 2, 3, 4, 5],
'customer_name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
'city': ['New York', 'London', 'Tokyo', 'Sydney', 'Berlin']
})
# Demographic Information Data
df_demographics = pd.DataFrame({
'city': ['New York', 'London', 'Tokyo', 'Sydney', 'Berlin'],
'population': [8419000, 8982000, 13960000, 5312000, 3769000],
'average_income': [75000, 65000, 85000, 90000, 55000]
})
# Merge Customer Data with Demographic Information
df_customer_demographics = pd.merge(df_customers, df_demographics, on='city', how='left')
print(df_customer_demographics)
আউটপুট:
customer_id customer_name city population average_income
0 1 Alice New York 8419000 75000
1 2 Bob London 8982000 65000
2 3 Charlie Tokyo 13960000 85000
3 4 David Sydney 5312000 90000
4 5 Eve Berlin 3769000 55000
ফলস্বরূপ ডেটাফ্রেম `df_customer_demographics` গ্রাহকের ডেটা এবং তাদের নিজ নিজ শহরের জনসংখ্যাগত তথ্য ধারণ করে, যা শহরের জনসংখ্যার উপর ভিত্তি করে গ্রাহকের আচরণ বিশ্লেষণের সুযোগ করে দেয়।
বৈশ্বিক সাপ্লাই চেইন ডেটা বিশ্লেষণ করা
বৈশ্বিক সাপ্লাই চেইন ডেটা বিশ্লেষণের জন্য পান্ডাস মার্জিং মূল্যবান, যেখানে তথ্য প্রায়শই একাধিক টেবিল জুড়ে ছড়িয়ে থাকে। উদাহরণস্বরূপ, সরবরাহকারী ডেটা, শিপিং তথ্য এবং বিক্রয় পরিসংখ্যান লিঙ্ক করা বাধাগুলি প্রকাশ করতে এবং লজিস্টিক অপ্টিমাইজ করতে পারে।
উদাহরণ:
# Supplier Data
df_suppliers = pd.DataFrame({
'supplier_id': [1, 2, 3],
'supplier_name': ['GlobalTech', 'EuroParts', 'AsiaSource'],
'location': ['Taiwan', 'Germany', 'China']
})
# Shipping Data
df_shipments = pd.DataFrame({
'shipment_id': [101, 102, 103, 104],
'supplier_id': [1, 2, 3, 1],
'destination': ['USA', 'Canada', 'Australia', 'Japan'],
'shipment_date': ['2023-01-10', '2023-02-15', '2023-03-20', '2023-04-25']
})
# Merge Supplier and Shipment Data
df_supply_chain = pd.merge(df_shipments, df_suppliers, on='supplier_id', how='left')
print(df_supply_chain)
আউটপুট:
shipment_id supplier_id destination shipment_date supplier_name location
0 101 1 USA 2023-01-10 GlobalTech Taiwan
1 102 2 Canada 2023-02-15 EuroParts Germany
2 103 3 Australia 2023-03-20 AsiaSource China
3 104 1 Japan 2023-04-25 GlobalTech Taiwan
উন্নত মার্জিং কৌশল
একাধিক কলামের উপর মার্জ করা
আপনি `on` প্যারামিটারে কলাম নামগুলির একটি তালিকা পাস করে একাধিক কলামের উপর ভিত্তি করে ডেটাফ্রেম মার্জ করতে পারেন।
উদাহরণ:
# DataFrame 1
df1 = pd.DataFrame({
'product_id': [1, 1, 2, 2],
'color': ['red', 'blue', 'red', 'blue'],
'quantity': [10, 15, 20, 25]
})
# DataFrame 2
df2 = pd.DataFrame({
'product_id': [1, 1, 2, 2],
'color': ['red', 'blue', 'red', 'blue'],
'price': [5, 7, 8, 10]
})
# Merge on multiple columns
df_merged_multiple = pd.merge(df1, df2, on=['product_id', 'color'], how='inner')
print(df_merged_multiple)
আউটপুট:
product_id color quantity price
0 1 red 10 5
1 1 blue 15 7
2 2 red 20 8
3 2 blue 25 10
বিভিন্ন কলামের নাম সহ মার্জ করা
যদি জয়েন কলামগুলির দুটি ডেটাফ্রেমে ভিন্ন নাম থাকে, তাহলে আপনি মার্জ করার জন্য ব্যবহার করার জন্য কলামের নামগুলি নির্দিষ্ট করতে `left_on` এবং `right_on` প্যারামিটারগুলি ব্যবহার করতে পারেন।
উদাহরণ:
# DataFrame 1
df1 = pd.DataFrame({
'product_id': [1, 2, 3],
'product_name': ['Product A', 'Product B', 'Product C']
})
# DataFrame 2
df2 = pd.DataFrame({
'id': [1, 2, 4],
'price': [10, 20, 25]
})
# Merge with different column names
df_merged_different = pd.merge(df1, df2, left_on='product_id', right_on='id', how='left')
print(df_merged_different)
আউটপুট:
product_id product_name id price
0 1 Product A 1.0 10.0
1 2 Product B 2.0 20.0
2 3 Product C NaN NaN
মার্জ বিশ্লেষণের জন্য `indicator` ব্যবহার করা
`pd.merge()` এ `indicator` প্যারামিটারটি ফলস্বরূপ ডেটাফ্রেমে `_merge` নামক একটি কলাম যোগ করে, যা প্রতিটি সারির উৎস নির্দেশ করে। কোন সারিগুলি মিলেছে এবং কোনগুলি মেলেনি তা বোঝার জন্য এটি কার্যকর।
উদাহরণ:
# Merge with indicator
df_merged_indicator = pd.merge(df_orders, df_customers, on='customer_id', how='outer', indicator=True)
print(df_merged_indicator)
আউটপুট:
order_id customer_id product_id quantity customer_name country _merge
0 1.0 101 1.0 2.0 Alice USA both
1 2.0 102 2.0 1.0 Bob Canada both
2 3.0 103 1.0 3.0 Charlie UK both
3 4.0 104 3.0 1.0 NaN NaN left_only
4 5.0 105 2.0 2.0 NaN NaN left_only
5 NaN 106 NaN NaN David Australia right_only
`_merge` কলামটি নির্দেশ করে যে সারিটি উভয় ডেটাফ্রেম থেকে (`both`), শুধুমাত্র বাম ডেটাফ্রেম থেকে (`left_only`), অথবা শুধুমাত্র ডান ডেটাফ্রেম থেকে (`right_only`) এসেছে।
মার্জ প্রকার যাচাই করা
`validate` প্যারামিটার নিশ্চিত করে যে মার্জ অপারেশন ডেটাফ্রেমগুলির মধ্যে প্রত্যাশিত সম্পর্ক প্রকারের সাথে সামঞ্জস্যপূর্ণ (যেমন, 'one_to_one', 'one_to_many')। এটি ডেটা অসামঞ্জস্যতা এবং ত্রুটি প্রতিরোধে সহায়তা করে।
উদাহরণ:
# Example with one-to-one validation
df_users = pd.DataFrame({
'user_id': [1, 2, 3],
'username': ['john_doe', 'jane_smith', 'peter_jones']
})
df_profiles = pd.DataFrame({
'user_id': [1, 2, 3],
'profile_description': ['Software Engineer', 'Data Scientist', 'Project Manager']
})
# Performing a one-to-one merge with validation
merged_df = pd.merge(df_users, df_profiles, on='user_id', validate='one_to_one')
print(merged_df)
যদি মার্জটি নির্দিষ্ট বৈধতা লঙ্ঘন করে (উদাহরণস্বরূপ, 'one_to_one' নির্দিষ্ট করা হলে একটি many-to-one সম্পর্ক), তাহলে একটি `MergeError` উত্থাপিত হবে, যা আপনাকে সম্ভাব্য ডেটা অখণ্ডতার সমস্যাগুলি সম্পর্কে সতর্ক করবে।
পারফরম্যান্স বিবেচনা
ডেটাফ্রেম মার্জিং এবং জয়েনিং কম্পিউটেশনালি ব্যয়বহুল হতে পারে, বিশেষ করে বড় ডেটাসেটের জন্য। এখানে পারফরম্যান্স উন্নত করার জন্য কিছু টিপস দেওয়া হল:
- উপযুক্ত জয়েন প্রকার ব্যবহার করুন: সঠিক জয়েন প্রকার নির্বাচন করা পারফরম্যান্সে উল্লেখযোগ্য প্রভাব ফেলতে পারে। উদাহরণস্বরূপ, যদি আপনার শুধুমাত্র মিলিত সারির প্রয়োজন হয়, তাহলে একটি ইনার জয়েন ব্যবহার করুন।
- জয়েন কলামগুলিকে ইন্ডেক্স করুন: জয়েন কলামগুলিকে ইন্ডেক্স করা মার্জিং প্রক্রিয়াকে দ্রুত করতে পারে।
- উপযুক্ত ডেটা প্রকার ব্যবহার করুন: নিশ্চিত করুন যে জয়েন কলামগুলির সামঞ্জস্যপূর্ণ ডেটা প্রকার রয়েছে।
- অপ্রয়োজনীয় কপি এড়িয়ে চলুন: ডেটার অপ্রয়োজনীয় কপি তৈরি করা এড়াতে `pd.merge()` এবং `df.join()` এ `copy=False` সেট করুন।
উপসংহার
ডেটাফ্রেম মার্জিং এবং জয়েনিং ডেটা বিশ্লেষণের মৌলিক অপারেশন। বিভিন্ন জয়েন প্রকার এবং কৌশলগুলি বোঝার মাধ্যমে, আপনি কার্যকরভাবে বিভিন্ন উৎস থেকে ডেটা একত্রিত এবং বিশ্লেষণ করতে পারবেন, মূল্যবান অন্তর্দৃষ্টি উন্মোচন করতে এবং অবহিত সিদ্ধান্ত গ্রহণকে চালিত করতে পারবেন। বিক্রয় ডেটার সাথে পণ্যের তথ্য একত্রিত করা থেকে শুরু করে বৈশ্বিক সাপ্লাই চেইন বিশ্লেষণ পর্যন্ত, এই কৌশলগুলি আয়ত্ত করা আপনাকে আত্মবিশ্বাসের সাথে জটিল ডেটা ম্যানিপুলেশন কাজগুলি মোকাবেলা করার ক্ষমতা দেবে। বড় ডেটাসেটের সাথে কাজ করার সময় পারফরম্যান্সের প্রভাবগুলি বিবেচনা করতে ভুলবেন না এবং আরও শক্তিশালী ও অন্তর্দৃষ্টিপূর্ণ বিশ্লেষণের জন্য `indicator` এবং `validate` প্যারামিটারগুলির মতো উন্নত বৈশিষ্ট্যগুলি ব্যবহার করুন।